ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース6.0
B25764-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

非永続モードでのXLAの使用

XLAは、非永続モードで初期化できます(「永続および非永続のXLAモード」を参照)。ほとんどの場合、XLAは永続モードで使用する必要があります。ただし、ディスクレス・ロギングを有効(Logging = 2)にしてデータ・ストアからレコードを読み取る場合は、非永続モードでXLAを使用する必要があります。

非永続モードと永続モードの主な相違点として、非永続モードでの処理の特徴を次に示します。

注意: この項のコード例は、install_dir/demo/xlaNonPersistent.cデモ・アプリケーションに基づいています。

非永続モードでのXLAの初期化

「データ・ストア接続ハンドルの取得」の説明に従ってODBCを初期化し、環境ハンドル、接続ハンドルおよび文ハンドルを取得した後、非永続モードでXLAを初期化し、XLAハンドル(xla_handle)を取得してトランザクション・ログにアクセスできます。非永続モードでは、複数のオープンXLA接続が存在する場合がありますが、いずれの時点でも1つの接続のみがステージング・バッファにアクセスするように読取りを調整する必要があります。

非永続モードでのXLAの初期化は、ブックマークを識別する必要がないことを除き、永続モードでの初期化とほぼ同じです(「XLAの初期化およびXLAハンドルの取得」を参照)。ttXlaHandle_h型としてxla_handleを初期化し、ttXlaOpenTimesTen関数へアドレスを渡してXLAハンドルを取得します。

ttXlaHandle_h xla_handle; 
rc = ttXlaOpenTimesTen(hdbc, &xla_handle); 

ステージング・バッファの構成

非永続モードでXLAを初期化した後、ttXlaConfigBuffer関数を使用して、XLAステージング・バッファのサイズを設定します。1つのステージング・バッファのみが1つのデータ・ストアに対して設定できます。ステージング・バッファのサイズの設定は、通常の切断の場合は保持されます。ただし、このサイズ設定は、チェックポイント処理が行われているかどうかによっては、異常終了した場合に保持されない可能性があります。

ステージング・バッファのサイズを選択する場合は、バッファを小さく設定しすぎると、TimesTenの更新でバッファがいっぱいとなり、それ以上の更新が拒否されることを考慮してください。また、バッファに大量の領域を割り当てすぎると、メモリーが浪費されます。

ステージング・バッファのサイズを設定するには、ttXlaConfigBuffernewSizeパラメータに値を、oldSizeパラメータにNULLを指定します。oldSizeには、ステージング・バッファの以前のサイズが返されます。

たとえば、ステージング・バッファのサイズを400,000バイトに設定するには、次のように入力します。

SQLUBIGINT  oldsz, newsz 
newsz = 400000; 
rc = ttXlaConfigBuffer(xla_handle, &oldsz, &newsz); 
printf("The old size of the XLA buffer is %d\n",(int)oldsz); 
printf("The new size of the XLA buffer is %d\n",(int)newsz); 
 

ステージング・バッファのサイズは、設定後、随時サイズ変更できます。ただし、サイズ変更を行うと、現在のバッファがコピーされるため、大幅にパフォーマンスが低下する場合があります。より小さいサイズをステージング・バッファに指定し、その小さいサイズに現在の内容を格納できない場合、ステージング・バッファは変更されず、エラーが返されます。

注意: ステージング・バッファのサイズの変更はすぐに実行されます。バッファのサイズが変更されると、ttXlaNextUpdateまたはttXlaNextUpdateWaitへの以前のコールによって返したレコードは無効になります。

また、ttXlaConfigBuffer関数を使用すると、ステージング・バッファの現在のサイズを取得できます。現在のバッファ・サイズを取得するには、newSizeにNULLを指定します。ステージング・バッファの現在のサイズはoldSizeに返されます。次に例を示します。

rc = ttXlaConfigBuffer(xla_handle, &oldsz, NULL); 
printf("The old size of the XLA buffer is %d\n",(int)oldsz); 
 

XLAの使用を終了した後、サイズを0(ゼロ)に設定してステージング・バッファを削除できます。次に例を示します。

newsz = 0; rc = ttXlaConfigBuffer(xla_handle, NULL &newsz);
注意: XLAステージング・バッファが0(ゼロ)以外のサイズに設定され、XLAリーダーが接続されていない場合、データ・ストアへの更新はバッファに書き込まれます。ステージング・バッファがいっぱいになると、ユーザーがステージング・バッファを削除(サイズを0(ゼロ)に設定)するか、またはXLAリーダーを接続してバッファからの読取りを開始するまで、データベース処理を正常に完了することはできません。

バッファ・ステータスの取得およびリセット

非永続モードでXLAを処理している場合は、ttXlaStatus関数を使用して、トランザクション・ログ・バッファおよびXLAステージング・バッファのステータス情報を取得できます。この情報はttXlaStatus_tデータ型でコード化されます。この情報には、次の情報が含まれています。